def my_cache(func):
    cache = {}

    def wrap(*args):    # 用 *args 来获取不确定数量的参数, 放在一个元组里面
        if args[0] not in cache:
            cache[args[0]] = func(*args)   # args 是 tuple, 要用 * 拆开作为函数的参数
            # print(cache)
        return cache[args[0]]
    return wrap


@my_cache
def fib(n):
    if n == 0:
        return 0
    elif n in (1, 2):
        return 1
    ret = fib(n - 1) + fib(n - 2)
    return ret


for i in range(10):
    print(fib(i), end=', ')

